package com.hpf.gupao.pattern.singleton.lazy;

/**
 * @description: 懒汉式
 * 优点：节省了内存==>synchronized 线程安全 ==> 双重校验 ==> 指令重排序
 * 缺点：程序可读性差，不够优雅
 * @datetime: 2021/5/17 20:06
 * @author: huangpengfei
 */
public class LazySingleton {

    private volatile static LazySingleton lazySingleton;

    private LazySingleton() {

    }

    // 性能低
//    public synchronized static LazySingleton getInstance() {
//        if(lazySingleton == null){
//            lazySingleton = new LazySingleton();
//        }
//        return lazySingleton;
//    }

    // 依旧性能低
//    public static LazySingleton getInstance(){
//        synchronized (LazySingleton.class) {
//            if(lazySingleton == null){
//                lazySingleton = new LazySingleton();
//            }
//        }
//        return lazySingleton;
//    }

    /**
     * 性能问题解决==》指令重排序问题
     * @return com.hpf.gupao.pattern.singleton.lazy.LazySingleton
     * @author  Fred
     * @datetime  2021/5/17 20:52
     */
    public static LazySingleton getInstance() {
        // 检查是否要创建实例
        if (lazySingleton == null) {
            synchronized (LazySingleton.class) {
                // 检查是否已经创建实例
                if(lazySingleton == null){
                    lazySingleton = new LazySingleton();
                    // 指令重排序
                }
            }
        }
        return lazySingleton;
    }
}
